diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e5a13962197105f2078d2a224cc57dfa09b4893
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+
diff --git a/server/__pycache__/theta.cpython-312.pyc b/server/__pycache__/theta.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0857045d9f503263008bd95d52b90550bfb6f453
Binary files /dev/null and b/server/__pycache__/theta.cpython-312.pyc differ
diff --git a/server/linear.py b/server/linear.py
new file mode 100644
index 0000000000000000000000000000000000000000..35cb2ee10fb4b9194d394e1168ca8c3493acbd49
--- /dev/null
+++ b/server/linear.py
@@ -0,0 +1,108 @@
+import pymysql.cursors
+import numpy as np
+import re
+from collections import Counter
+
+connection = pymysql.connect(host='localhost',
+ user='root',
+ password='123456',
+ database='soft',
+ cursorclass=pymysql.cursors.DictCursor)
+cursor = connection.cursor()
+
+sql = "select * from salary where type=1"
+
+cursor.execute(sql)
+result = cursor.fetchall()
+
+
+def getwangluoanquanScore():
+ results = []
+ for item in result:
+ results.append(item["skills"].replace(" ", "").split("\n"))
+
+ temp = []
+ for item in results:
+ temp += item
+ temps = []
+
+ for item in temp:
+ if item:
+ temps.append(item)
+
+ counInfo = Counter(temps)
+ print(counInfo)
+ counInfo = counInfo.most_common()
+
+ counInfoList = []
+
+ for item in counInfo:
+ counInfoList.append(list(item))
+
+ sums = 0
+
+ for item in counInfoList:
+ sums += item[1]
+ for item in counInfoList:
+ item[1] = item[1] / sums
+
+ counInfoDict = {}
+ for item in counInfoList:
+ counInfoDict[item[0]] = item[1]
+
+ return counInfoDict
+
+
+# 以字典的方式来记录技能对应的权重(分值)
+score = getwangluoanquanScore()
+
+X = []
+Y = []
+cityMark = {"太原": 1, "北京": 2}
+
+eduMark = {"大专": 1, "本科": 2, "硕士": 3, "博士": 4, "不限专业": 0}
+
+for item in result:
+ str1 = item["salary"]
+ if not (re.findall("天", str1)) and re.findall("(千|万)", str1):
+ a = []
+ a.append(1)
+ # 城市
+ a.append(cityMark[item["city"]])
+ # 学历
+ edu = item["education"].replace(" ", "").replace("\n", "")
+ a.append(eduMark.get(edu, 0))
+ # 工作年限
+ workage = item["workage"].replace(" ", "").replace("\n", "")
+ if re.findall("\d", workage):
+ workage = workage[:1]
+ else:
+ workage = 1
+ a.append(workage)
+ # 技能值
+ scores = 0
+ for i in item["skills"].replace(" ", "").split("\n"):
+ if i:
+ scores += score[i]
+ print(scores)
+ a.append(scores)
+ X.append(a)
+
+ nums = re.findall("\d+\.{0,1}\d*", str1)
+ flag = re.findall("(千|万)", str1)
+ num1 = float(nums[0]) * 1000 if flag[0] == "千" else float(nums[0]) * 10000
+ num2 = float(nums[1]) * 1000 if flag[1] == "千" else float(nums[1]) * 10000
+ avg = (num1 + num2) / 2
+ Y.append(avg)
+
+ X = np.array(X).astype(float)
+ Y = np.array(Y)
+ print(X)
+ print(Y)
+ theta = np.linalg.pinv(X.T.dot(X)).dot(X.T).dot(Y)
+ print(theta)
+ f = open("theta.py", "w")
+ f.write("import numpy as np \ntheta=" + str(list(theta)))
+
+
+
diff --git a/server/server.py b/server/server.py
new file mode 100644
index 0000000000000000000000000000000000000000..99a6b2ad82f48d56372e2751bf2621ca5164820f
--- /dev/null
+++ b/server/server.py
@@ -0,0 +1,485 @@
+from flask import Flask, render_template, request
+from flask_cors import CORS
+import pymysql.constants
+from collections import Counter
+import re
+
+connection = pymysql.connect(host='localhost',
+ user='root',
+ password='123456',
+ database='soft',
+ cursorclass=pymysql.cursors.DictCursor)
+cursor = connection.cursor()
+app = Flask(__name__)
+CORS(app, resources={r"/*": {"origins": "*"}})
+
+
+#网络安全
+@app.route('/getwangluoanquanData')
+def getwangluoanquanData():
+ sql = "select * from salary where type=1"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ return result
+
+@app.route("/getwangluoanquanEcharts")
+def getwangluoanquanEcharts():
+ sql = "select skills from salary where type=1"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ print(infos)
+ X = []
+ Y = []
+ for item in infos:
+ if item[0]:
+ X.append(item[0])
+ Y.append(item[1])
+
+ return [X[:10], Y[:10]]
+
+@app.route("/getwangluoanquanEduEcharts")
+def getwangluoanquanEduEcharts():
+ sql = "select education from salary where type=1"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ if item["education"].replace(" ", "").replace("\n", ""):
+ infos.append(item["education"].replace(" ", "").replace("\n", ""))
+ infos = (Counter(infos).most_common())
+ arr = []
+ for item in infos:
+ obj = {}
+ obj["value"] = item[1]
+ obj["name"] = item[0]
+ arr.append(obj)
+ return arr[:10]
+
+@app.route("/getwangluoanquanEduAndSalaryEcharts")
+def getwangluoanquanEduAndSalaryEcharts():
+ sql = "select education,salary from salary where type=1"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ total = {}
+ totalnum = {}
+ for item in result:
+ if item["education"]:
+ edu = item["education"].replace(" ", "").replace("\n", "")
+ price = item["salary"].replace(" ", "").replace("\n", "")
+
+ if not (re.findall("天", price)) and re.findall("(千|万)", price):
+ nums = re.findall("\d+\.{0,1}\d*", price)
+ flag = re.findall("(千|万)", price)
+ num1 = float(nums[0]) * 1000 if flag[0] == "千" else float(nums[0]) * 10000
+ num2 = float(nums[1]) * 1000 if flag[1] == "千" else float(nums[1]) * 10000
+ avg = (num1 + num2) / 2
+ if total.get(edu):
+ total[edu] += avg
+ totalnum[edu] += 1
+ else:
+ total[edu] = avg
+ totalnum[edu] = 1
+
+ X = []
+ Y = []
+ for item in total:
+ X.append(item)
+ Y.append(total[item] / totalnum[item])
+
+ print(X)
+ print(Y)
+ return [X[:10], Y[:10]]
+
+@app.route("/getwangluoanquanScore")
+def getwangluoanquanScore():
+ sql = "select skills from salary where type=1"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ total = 0
+ newinfos = []
+ for item in infos:
+ if item[0]:
+ total += item[1]
+ newinfos.append(list(item))
+ for item in newinfos:
+ item[1] = item[1] / total
+ return newinfos[:10]
+
+
+
+#人工智能
+@app.route('/getrengongzhinengData')
+def getrengongzhinengData():
+ sql = "select * from salary where type=2"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ return result
+
+@app.route("/getrgznEcharts")
+def getrgznEcharts():
+ sql = "select skills from salary where type=2"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ print(infos)
+ X = []
+ Y = []
+ for item in infos:
+ if item[0]:
+ X.append(item[0])
+ Y.append(item[1])
+
+ return [X[:10], Y[:10]]
+
+@app.route("/getrgznEduEcharts")
+def getrgznEduEcharts():
+ sql = "select education from salary where type=2"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ if item["education"].replace(" ", "").replace("\n", ""):
+ infos.append(item["education"].replace(" ", "").replace("\n", ""))
+ infos = (Counter(infos).most_common())
+ arr = []
+ for item in infos:
+ obj = {}
+ obj["value"] = item[1]
+ obj["name"] = item[0]
+ arr.append(obj)
+ return arr[:10]
+
+@app.route("/getrgznEduAndSalaryEcharts")
+def getrgznEduAndSalaryEcharts():
+ sql = "select education,salary from salary where type=2"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ total = {}
+ totalnum = {}
+ for item in result:
+ if item["education"]:
+ edu = item["education"].replace(" ", "").replace("\n", "")
+ price = item["salary"].replace(" ", "").replace("\n", "")
+
+ if not (re.findall("天", price)) and re.findall("(千|万)", price):
+ nums = re.findall("\d+\.{0,1}\d*", price)
+ flag = re.findall("(千|万)", price)
+ num1 = float(nums[0]) * 1000 if flag[0] == "千" else float(nums[0]) * 10000
+ num2 = float(nums[1]) * 1000 if flag[1] == "千" else float(nums[1]) * 10000
+ avg = (num1 + num2) / 2
+ if total.get(edu):
+ total[edu] += avg
+ totalnum[edu] += 1
+ else:
+ total[edu] = avg
+ totalnum[edu] = 1
+
+ X = []
+ Y = []
+ for item in total:
+ X.append(item)
+ Y.append(total[item] / totalnum[item])
+
+ print(X)
+ print(Y)
+ return [X[:10], Y[:10]]
+
+@app.route("/getrgznScore")
+def getrgznScore():
+ sql = "select skills from salary where type=2"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ total = 0
+ newinfos = []
+ for item in infos:
+ if item[0]:
+ total += item[1]
+ newinfos.append(list(item))
+ for item in newinfos:
+ item[1] = item[1] / total
+ return newinfos[:10]
+
+
+#软件开发
+@app.route('/getruanjiankaifaData')
+def getruanjiankaifaData():
+ sql = "select * from salary where type=3"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ return result
+
+@app.route("/getkfEcharts")
+def getkfEcharts():
+ sql = "select skills from salary where type=3"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ print(infos)
+ X = []
+ Y = []
+ for item in infos:
+ if item[0]:
+ X.append(item[0])
+ Y.append(item[1])
+
+ return [X[:10], Y[:10]]
+
+@app.route("/getkfEduEcharts")
+def getkfEduEcharts():
+ sql = "select education from salary where type=3"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ if item["education"].replace(" ", "").replace("\n", ""):
+ infos.append(item["education"].replace(" ", "").replace("\n", ""))
+ infos = (Counter(infos).most_common())
+ arr = []
+ for item in infos:
+ obj = {}
+ obj["value"] = item[1]
+ obj["name"] = item[0]
+ arr.append(obj)
+ return arr[:10]
+
+@app.route("/getkfEduAndSalaryEcharts")
+def getkfEduAndSalaryEcharts():
+ sql = "select education,salary from salary where type=3"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ total = {}
+ totalnum = {}
+ for item in result:
+ if item["education"]:
+ edu = item["education"].replace(" ", "").replace("\n", "")
+ price = item["salary"].replace(" ", "").replace("\n", "")
+
+ if not (re.findall("天", price)) and re.findall("(千|万)", price):
+ nums = re.findall("\d+\.{0,1}\d*", price)
+ flag = re.findall("(千|万)", price)
+ num1 = float(nums[0]) * 1000 if flag[0] == "千" else float(nums[0]) * 10000
+ num2 = float(nums[1]) * 1000 if flag[1] == "千" else float(nums[1]) * 10000
+ avg = (num1 + num2) / 2
+ if total.get(edu):
+ total[edu] += avg
+ totalnum[edu] += 1
+ else:
+ total[edu] = avg
+ totalnum[edu] = 1
+
+ X = []
+ Y = []
+ for item in total:
+ X.append(item)
+ Y.append(total[item] / totalnum[item])
+
+ print(X)
+ print(Y)
+ return [X[:10], Y[:10]]
+
+@app.route("/getkfScore")
+def getkfScore():
+ sql = "select skills from salary where type=3"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ total = 0
+ newinfos = []
+ for item in infos:
+ if item[0]:
+ total += item[1]
+ newinfos.append(list(item))
+ for item in newinfos:
+ item[1] = item[1] / total
+ return newinfos[:10]
+
+
+#测试工程师
+@app.route('/getceshiData')
+def getceshiData():
+ sql = "select * from salary where type=4"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ return result
+
+@app.route("/getcsEcharts")
+def getcsEcharts():
+ sql = "select skills from salary where type=4"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ print(infos)
+ X = []
+ Y = []
+ for item in infos:
+ if item[0]:
+ X.append(item[0])
+ Y.append(item[1])
+
+ return [X[:10], Y[:10]]
+
+@app.route("/getcsEduEcharts")
+def getcsEduEcharts():
+ sql = "select education from salary where type=4"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+ infos = []
+ for item in result:
+ if item["education"].replace(" ", "").replace("\n", ""):
+ infos.append(item["education"].replace(" ", "").replace("\n", ""))
+ infos = (Counter(infos).most_common())
+ arr = []
+ for item in infos:
+ obj = {}
+ obj["value"] = item[1]
+ obj["name"] = item[0]
+ arr.append(obj)
+ return arr[:10]
+
+@app.route("/getcsEduAndSalaryEcharts")
+def getcsEduAndSalaryEcharts():
+ sql = "select education,salary from salary where type=4"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ total = {}
+ totalnum = {}
+ for item in result:
+ if item["education"]:
+ edu = item["education"].replace(" ", "").replace("\n", "")
+ price = item["salary"].replace(" ", "").replace("\n", "")
+
+ if not (re.findall("天", price)) and re.findall("(千|万)", price):
+ nums = re.findall("\d+\.{0,1}\d*", price)
+ flag = re.findall("(千|万)", price)
+ num1 = float(nums[0]) * 1000 if flag[0] == "千" else float(nums[0]) * 10000
+ num2 = float(nums[1]) * 1000 if flag[1] == "千" else float(nums[1]) * 10000
+ avg = (num1 + num2) / 2
+ if total.get(edu):
+ total[edu] += avg
+ totalnum[edu] += 1
+ else:
+ total[edu] = avg
+ totalnum[edu] = 1
+
+ X = []
+ Y = []
+ for item in total:
+ X.append(item)
+ Y.append(total[item] / totalnum[item])
+
+ print(X)
+ print(Y)
+ return [X[:10], Y[:10]]
+
+@app.route("/getcsScore")
+def getcsScore():
+ sql = "select skills from salary where type=4"
+ cursor.execute(sql)
+ result = cursor.fetchall()
+ connection.commit()
+
+ infos = []
+ for item in result:
+ infos += (item["skills"].replace(" ", "").split("\n"))
+
+ infos = (Counter(infos))
+ infos = infos.most_common()
+ total = 0
+ newinfos = []
+ for item in infos:
+ if item[0]:
+ total += item[1]
+ newinfos.append(list(item))
+ for item in newinfos:
+ item[1] = item[1] / total
+ return newinfos[:10]
+
+
+@app.route("/predict")
+def predict():
+ X = []
+ city = float(request.args.get("city"))
+ workage = float(request.args.get("workage"))
+ education = float(request.args.get("education"))
+ skills = request.args.get("skills")
+ nums = 0
+ for item in skills.split(","):
+ nums += float(item)
+
+ X.append(1)
+ X.append(city)
+ X.append(education)
+ X.append(workage)
+ X.append(nums)
+ from theta import theta
+ import numpy as np
+ X = np.array(X)
+ theta = np.array(theta)
+ return str(X.dot(theta))
+
+
+app.run()
diff --git a/server/theta.py b/server/theta.py
new file mode 100644
index 0000000000000000000000000000000000000000..490fae06dca9dd770f3e093e6bc0d345adb5338b
--- /dev/null
+++ b/server/theta.py
@@ -0,0 +1,2 @@
+import numpy as np
+theta=[np.float64(2154.0025103505127), np.float64(2154.0025103505113), np.float64(0.0), np.float64(2154.0025103505113), np.float64(18.894758862723798), np.float64(43.1880202576544), np.float64(75.57903545089519), np.float64(80.97753798310198), np.float64(86.3760405153088), np.float64(89.07529178141215), np.float64(91.77454304751556), np.float64(94.47379431361892), np.float64(99.87229684582573), np.float64(102.57154811192915), np.float64(118.76705570854952)]
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4fe8174918aeb805fe819e4fcb7c694ec9592499
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+ 薪资 预测系统
+
+
+
+
+
+
+
+
+
+
+
+
+ wangluoanquan
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/xuexiao.png b/src/assets/xuexiao.png
new file mode 100644
index 0000000000000000000000000000000000000000..582cad469a9bc7144d757e565edb6b1febe63d4d
Binary files /dev/null and b/src/assets/xuexiao.png differ
diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
new file mode 100644
index 0000000000000000000000000000000000000000..669d8812d6e82796488ae0d8f80b79bb6c7a1144
--- /dev/null
+++ b/src/components/HelloWorld.vue
@@ -0,0 +1,58 @@
+
+
+
{{ msg }}
+
+ For a guide and recipes on how to configure / customize this project,
+ check out the
+ vue-cli documentation.
+
+
Installed CLI Plugins
+
+
Essential Links
+
+
Ecosystem
+
+
+
+
+
+
+
+
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e71f116a591124b1783a2ee9a5e6479c97bee7f
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,11 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+Vue.config.productionTip = false
+Vue.use(ElementUI);
+new Vue({
+ router,
+ render: h => h(App)
+}).$mount('#app')
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..556970fd7591d7918f2d73175574212d85ceb097
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,108 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+import test from '../views/test.vue'
+import wangluoanquan from "@/views/wangluoanquan.vue";
+import rengongzhineng from "@/views/rengongzhineng.vue";
+import ruanjiankaifa from "@/views/ruanjiankaifa.vue";
+import wangluoanquanCharts from "@/views/wangluoanquanCharts.vue";
+import wlaqform from "@/views/wlaqform.vue";
+import rgznCharts from "@/views/rgznCharts.vue";
+import csCharts from "@/views/csCharts.vue";
+import kfCharts from "@/views/kfCharts.vue";
+import ceshi from "@/views/ceshi.vue";
+import kfform from "@/views/kfform.vue";
+import csform from "@/views/csform.vue";
+import rgznform from "@/views/rgznform.vue";
+
+Vue.use(VueRouter)
+
+const routes = [
+ //网络安全
+ {
+ path: '/wangluoanquan',
+ name: 'wangluoanquan',
+ component: wangluoanquan
+ },
+ {
+ path: '/wangluoanquanCharts',
+ name: 'wangluoanquanCharts',
+ component: wangluoanquanCharts
+ },
+ {
+ path: '/wlaqform',
+ name: 'wlaqform',
+ component: wlaqform
+ },
+ //人工智能
+ {
+ path: '/rengongzhineng',
+ name: 'rengongzhineng',
+ component: rengongzhineng
+ },
+ {
+ path: '/rgznCharts',
+ name: 'rgznCharts',
+ component: rgznCharts
+ },
+ {
+ path: '/rgznform',
+ name: 'rgznform',
+ component: rgznform
+ },
+
+ //软件开发
+ {
+ path: '/ruanjiankaifa',
+ name: 'ruanjiankaifa',
+ component: ruanjiankaifa
+ },
+ {
+ path: '/kfCharts',
+ name: 'kfCharts',
+ component: kfCharts
+ },
+ {
+ path: '/kfform',
+ name: 'kfform',
+ component: kfform
+ },
+
+ //测试工程师
+ {
+ path: '/ceshi',
+ name: 'ceshi',
+ component: ceshi
+ },
+ {
+ path: '/csCharts',
+ name: 'csCharts',
+ component: csCharts
+ },
+ {
+ path: '/csform',
+ name: 'csform',
+ component:csform
+ },
+
+
+
+ {
+ path: '/test',
+ name: 'test',
+ component: test
+ },
+ {
+ path: '/about',
+ name: 'about',
+ // route level code-splitting
+ // this generates a separate chunk (about.[hash].js) for this route
+ // which is lazy-loaded when the route is visited.
+ component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
+ }
+]
+
+const router = new VueRouter({
+ routes
+})
+
+export default router
diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3fa28070de24f2055171ca2e20543881cb7fdf1c
--- /dev/null
+++ b/src/views/AboutView.vue
@@ -0,0 +1,5 @@
+
+
+
This is an about page
+
+
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e8d96d7a7049d1ddda2073b5bed757935fc35fbc
--- /dev/null
+++ b/src/views/HomeView.vue
@@ -0,0 +1,18 @@
+
+
+

+
+
+
+
+
diff --git a/src/views/ceshi.vue b/src/views/ceshi.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e8a0a25ed44728aca263a832e8b3a561f799feda
--- /dev/null
+++ b/src/views/ceshi.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/csCharts.vue b/src/views/csCharts.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f8e13a159a151840262286072312f538775c5e14
--- /dev/null
+++ b/src/views/csCharts.vue
@@ -0,0 +1,123 @@
+
+
+
+ 技能排行榜
+
+
+ 学历分布图
+
+
+ 学历和薪资折线图
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/csform.vue b/src/views/csform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3f90572e3879a928860b6601e7fe3dff91b74d25
--- /dev/null
+++ b/src/views/csform.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item[0]}}
+
+
+
+
+ 立即预测
+ 重置
+
+ 预测薪资:{{salary}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/kfCharts.vue b/src/views/kfCharts.vue
new file mode 100644
index 0000000000000000000000000000000000000000..db7d7eea02276c96ed2dec6597a9998dd91b2134
--- /dev/null
+++ b/src/views/kfCharts.vue
@@ -0,0 +1,123 @@
+
+
+
+ 技能排行榜
+
+
+ 学历分布图
+
+
+ 学历和薪资折线图
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/kfform.vue b/src/views/kfform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9afa2ba1c1c3591b154f08c0be870ff8227c17b6
--- /dev/null
+++ b/src/views/kfform.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item[0]}}
+
+
+
+
+ 立即预测
+ 重置
+
+ 预测薪资:{{salary}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rengongzhineng.vue b/src/views/rengongzhineng.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f995a596283efb722bd614b713dccd107e2ebbb2
--- /dev/null
+++ b/src/views/rengongzhineng.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rgznCharts.vue b/src/views/rgznCharts.vue
new file mode 100644
index 0000000000000000000000000000000000000000..17730f0baa58307da5ccf9deacd640edef3402d9
--- /dev/null
+++ b/src/views/rgznCharts.vue
@@ -0,0 +1,123 @@
+
+
+
+ 技能排行榜
+
+
+ 学历分布图
+
+
+ 学历和薪资折线图
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rgznform.vue b/src/views/rgznform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..da0a719ef2caabc69529a8c8435cf455c8873266
--- /dev/null
+++ b/src/views/rgznform.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item[0]}}
+
+
+
+
+ 立即预测
+ 重置
+
+ 预测薪资:{{salary}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/ruanjiankaifa.vue b/src/views/ruanjiankaifa.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1bf03a98537876f6653a290cd73a399e7e69824f
--- /dev/null
+++ b/src/views/ruanjiankaifa.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/wangluoanquan.vue b/src/views/wangluoanquan.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3fda73ea60cb431c1010c92d0f4be5a86bb83853
--- /dev/null
+++ b/src/views/wangluoanquan.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/wangluoanquanCharts.vue b/src/views/wangluoanquanCharts.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6613deb0279628f34ce68e54f62a1b20b777839d
--- /dev/null
+++ b/src/views/wangluoanquanCharts.vue
@@ -0,0 +1,123 @@
+
+
+
+ 技能排行榜
+
+
+ 学历分布图
+
+
+ 学历和薪资折线图
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/wlaqform.vue b/src/views/wlaqform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..26e556ef45152aef875e0b6da4b025b1c2d0ced0
--- /dev/null
+++ b/src/views/wlaqform.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item[0]}}
+
+
+
+
+ 立即预测
+ 重置
+
+ 预测薪资:{{salary}}
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\346\210\252\345\233\276/\345\262\227\344\275\215\344\277\241\346\201\257.png" "b/\346\210\252\345\233\276/\345\262\227\344\275\215\344\277\241\346\201\257.png"
new file mode 100644
index 0000000000000000000000000000000000000000..18f350aed87b388cac2e725f112f4d71fd43f179
Binary files /dev/null and "b/\346\210\252\345\233\276/\345\262\227\344\275\215\344\277\241\346\201\257.png" differ
diff --git "a/\346\210\252\345\233\276/\346\212\230\347\272\277\345\233\276.png" "b/\346\210\252\345\233\276/\346\212\230\347\272\277\345\233\276.png"
new file mode 100644
index 0000000000000000000000000000000000000000..66246e6e72845a35bd42f29a74611133243a4174
Binary files /dev/null and "b/\346\210\252\345\233\276/\346\212\230\347\272\277\345\233\276.png" differ
diff --git "a/\346\210\252\345\233\276/\346\237\261\347\212\266\345\233\276.png" "b/\346\210\252\345\233\276/\346\237\261\347\212\266\345\233\276.png"
new file mode 100644
index 0000000000000000000000000000000000000000..456513153fb190e7aa05427d7fb49c73c4cefb94
Binary files /dev/null and "b/\346\210\252\345\233\276/\346\237\261\347\212\266\345\233\276.png" differ
diff --git "a/\346\210\252\345\233\276/\351\242\204\346\265\213.png" "b/\346\210\252\345\233\276/\351\242\204\346\265\213.png"
new file mode 100644
index 0000000000000000000000000000000000000000..0204cfe804413febc52795fd1d4a91e69155a750
Binary files /dev/null and "b/\346\210\252\345\233\276/\351\242\204\346\265\213.png" differ
diff --git "a/\346\210\252\345\233\276/\351\245\274\347\212\266\345\233\276.png" "b/\346\210\252\345\233\276/\351\245\274\347\212\266\345\233\276.png"
new file mode 100644
index 0000000000000000000000000000000000000000..b5f95522ccc342c24a09d36644327c85e6ae8f20
Binary files /dev/null and "b/\346\210\252\345\233\276/\351\245\274\347\212\266\345\233\276.png" differ
diff --git "a/\346\226\207\346\230\245\350\213\22720211106232 .docx" "b/\346\226\207\346\230\245\350\213\22720211106232 .docx"
new file mode 100644
index 0000000000000000000000000000000000000000..c4cb099f94b2d704dc0d5d363a6988017cf3eb87
Binary files /dev/null and "b/\346\226\207\346\230\245\350\213\22720211106232 .docx" differ